package cn.iocoder.yudao.module.product.spu.mq;

import cn.hutool.extra.spring.SpringUtil;
import cn.iocoder.yudao.module.api.product.spu.message.ProductSpuSalesCountChangeMessage;
import cn.iocoder.yudao.module.api.product.spu.message.ProductSpuStockChangeMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * 产品 SKU 事件生产者
 *
 * @author 山野羡民
 */
@Slf4j
@Component
public class ProductSpuProducer {

    /**
     * 发送 {@link ProductSpuStockChangeMessage} 消息
     *
     * @param shopId 店铺编号
     * @param count 库存变化数量，负数表示减少，正数表示增加
     */
    public void sendProductSkuStockChangeMessage(Long shopId, Integer count) {
        log.info("[sendProductSkuStockChangeMessage] shopId={}, count={}", shopId, count);
        // 生产产品库存变化事件，其他模块收到消息后进行相应处理
        SpringUtil.getApplicationContext().publishEvent(new ProductSpuStockChangeMessage(shopId, count));
    }

    /**
     * 发送 {@link ProductSpuSalesCountChangeMessage} 消息
     *
     * @param shopId 店铺编号
     * @param count 库存变化数量，负数表示减少，正数表示增加
     */
    public void sendProductSpuSalesCountChangeMessage(Long shopId, Integer count) {
        log.info("[sendProductSpuSalesCountChangeMessage] shopId={}, count={}", shopId, count);
        // 生产产品销量变化事件，其他模块收到消息后进行相应处理
        SpringUtil.getApplicationContext().publishEvent(new ProductSpuSalesCountChangeMessage(shopId, count));
    }

}
